package com.klm.easymq.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * MQ消息生产者注解
 * 用于标记消息生产方法
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MQProducer {
    
    /**
     * 消息主题
     */
    String topic();
    
    /**
     * 消息标签
     */
    String tag() default "";
    
    /**
     * 消息键表达式（SpEL）
     * 用于生成消息键
     */
    String key() default "";
    
    /**
     * 延迟级别
     * 0表示不延迟，1-18表示不同的延迟级别
     */
    int delayLevel() default 0;
    
    /**
     * 消息类型
     */
    MessageType messageType() default MessageType.NORMAL;
    
    /**
     * 发送模式
     */
    SendMode sendMode() default SendMode.SYNC;
    
    /**
     * 消息类型
     */
    enum MessageType {
        /**
         * 普通消息
         */
        NORMAL,
        
        /**
         * 顺序消息
         */
        ORDERED,
        
        /**
         * 事务消息
         */
        TRANSACTION
    }
    
    /**
     * 发送模式
     */
    enum SendMode {
        /**
         * 同步发送
         */
        SYNC,
        
        /**
         * 异步发送
         */
        ASYNC,
        
        /**
         * 单向发送
         */
        ONEWAY
    }
} 